package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"time"
)

// 定义一个Login结构体，用于绑定POST请求中的JSON数据
type Login struct {
	Username string `form:"username" json:"username" binding:"required"`
	Password string `form:"password" json:"password" binding:"required"`
}

// 定义一个日志中间件函数
func LoggerMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 记录请求开始时间
		start := time.Now()
		// 打印请求的URL
		fmt.Printf("Started %s %s\n", c.Request.Method, c.Request.URL.Path)
		// 执行后续的处理函数
		c.Next()
		// 计算请求处理时间
		elapsed := time.Since(start)
		fmt.Printf("Completed in %v\n", elapsed)
	}
}

func main() {
	r := gin.Default()
	r.Use(LoggerMiddleware())
	// 处理根路径的GET请求
	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "Hello, Gin!"})
	})
	// 处理/login的POST请求
	r.POST("/login", func(c *gin.Context) {
		var login Login
		// 绑定请求体中的JSON数据到login结构体
		if err := c.ShouldBindJSON(&login); err != nil {
			// 如果绑定失败，返回400状态码和错误信息
			c.JSON(400, gin.H{"error": err.Error()})
			return
		}
		// 这里可以进行实际的用户名和密码验证逻辑
		// 假设验证通过
		if login.Username == "admin" && login.Password == "123456" {
			c.JSON(200, gin.H{"message": "Login Success"})
		} else {
			c.JSON(401, gin.H{"message": "Login Failed"})
		}
	})
	r.Run(":8080")
}
